-- 观看剧集功能模块
local lrSDK = require("老狼孩插件懒人免ROOT无障碍版")
local cr = require("cr")
local app_config = require("app_config")
local time_tracker = require("time_tracker")
local comment = require("comment")
local ad_converter = require("ad_converter")

local watch_drama = {}

-- 观看剧集功能
function watch_drama.观看剧集(观看时间)
    local current_app = app_config.phoenix_read
    观看时间 = 观看时间 or math.random(5, 9)  -- 默认观看时间为5-9秒之间的随机值
    
    lrSDK.日志类_调试输出("开始执行观看剧集流程，计划观看时间：" .. 观看时间 .. "秒")
    
    -- 等待首页加载
    cr.等待(2000)
    
    -- 尝试使用遍历点击方法查找视频入口
    lrSDK.日志类_调试输出("尝试使用遍历方法点击视频入口")
    
    -- 创建视频入口节点
    local 视频入口 = depth(current_app.elements.video_entry.depth)
                  :className(current_app.elements.video_entry.class_name)
                  :packageName(current_app.package_name)
                  :id(current_app.elements.video_entry.id)
    
    -- 直接执行一次遍历点击
    local 遍历结果 = lrSDK.节点类_遍历节点点击(视频入口)
    
    -- 如果遍历点击失败，随机点击屏幕中间位置
    if not 遍历结果 then
        lrSDK.日志类_调试输出("遍历点击视频失败，改为点击屏幕中间位置")
        local width, height = cr.获取屏幕分辨率()
        local params = cr.计算滑动参数(width, height)
        lrSDK.触控类_点击坐标(params.中心x, params.中心x)
    end
    
    -- 等待视频加载
    cr.等待(500)
    
    -- 检查并点击"继续播放"按钮
    if current_app.elements.continue_play then
        local 继续播放 = className(current_app.elements.continue_play.class_name)
                    :packageName(current_app.package_name)
                    :text(current_app.elements.continue_play.text)
                    :depth(current_app.elements.continue_play.depth)
                    
        local 继续播放结果 = lrSDK.节点类_找节点(继续播放, true, 2000)
        if 继续播放结果 then
            lrSDK.日志类_调试输出("找到并点击'继续播放'按钮")
            cr.等待(1000)
        end
    else
        -- 如果配置中没有continue_play，直接使用硬编码方式查找
        lrSDK.日志类_调试输出("使用硬编码方式查找'继续播放'按钮")
        local 继续播放 = className("android.widget.TextView")
                    :packageName("com.phoenix.read")
                    :text("继续播放")
                    :depth(5)
                    
        local 继续播放结果 = lrSDK.节点类_找节点(继续播放, true, 2000)
        if 继续播放结果 then
            lrSDK.日志类_调试输出("找到并点击'继续播放'按钮")
            cr.等待(1000)
        end
    end
    
    -- 检查是否进入视频观看界面（查找"倍速"文本）
    local 倍速标签 = className(current_app.elements.playback_speed.class_name)
                  :packageName(current_app.package_name)
                  :text(current_app.elements.playback_speed.text)
    
    点击结果 = lrSDK.节点类_找节点(倍速标签, false, 5000)
    if not 点击结果 then
        lrSDK.日志类_调试输出("未进入视频观看界面，未找到'倍速'标签，任务失败")
        return false
    end
    
    lrSDK.日志类_调试输出("已确认进入视频观看界面")
    
    -- 开始记录观看时间
    time_tracker.开始记录()
    
    -- 随机决定是否输入评论（概率约为90%）
    if math.random(1, 100) <= 90 then
        lrSDK.日志类_调试输出("尝试执行输入评论功能")
        -- 准备几条不同的评论内容
        local 评论内容列表 = {
            "这个视频太好看了！",
            "我觉得情节非常精彩！",
            "太喜欢这个剧情了，期待更新！",
            "推荐大家都来看看这个视频",
            "演员表演真的很到位，赞一个"
        }
        
        -- 随机选择一条评论
        local 随机索引 = math.random(1, #评论内容列表)
        local 评论内容 = 评论内容列表[随机索引]
        
        -- 调用输入评论功能
        local 输入结果 = comment.输入评论(评论内容)
        if 输入结果 then
            lrSDK.日志类_调试输出("输入评论功能执行成功")
        else
            lrSDK.日志类_调试输出("输入评论功能执行失败")
        end
    end
    
    -- 点赞操作
    lrSDK.日志类_调试输出("尝试点赞")
    local 点赞按钮 = depth(current_app.elements.like_button.depth)
                  :className(current_app.elements.like_button.class_name)
                  :packageName(current_app.package_name)
                  :id(current_app.elements.like_button.id)
    
    点击结果 = lrSDK.节点类_找节点(点赞按钮, true, 2000)
    if 点击结果 then
        lrSDK.日志类_调试输出("点赞成功")
    else
        lrSDK.日志类_调试输出("未找到点赞按钮")
    end
    
    -- 收藏操作
    lrSDK.日志类_调试输出("尝试收藏")
    local 收藏按钮 = depth(current_app.elements.favorite_button.depth)
                  :className(current_app.elements.favorite_button.class_name)
                  :packageName(current_app.package_name)
                  :id(current_app.elements.favorite_button.id)
    
    点击结果 = lrSDK.节点类_找节点(收藏按钮, true, 2000)
    if 点击结果 then
        lrSDK.日志类_调试输出("收藏操作执行成功")
        
        -- 检查是否出现"取消"按钮
        cr.等待(1000)
        local 取消按钮 = className(current_app.elements.cancel_button.class_name)
                      :packageName(current_app.package_name)
                      :text(current_app.elements.cancel_button.text)
        
        点击结果 = lrSDK.节点类_找节点(取消按钮, true, 2000)
        if 点击结果 then
            lrSDK.日志类_调试输出("已取消收藏")
        end
    else
        lrSDK.日志类_调试输出("未找到收藏按钮")
    end
    
    -- 观看视频指定时间
    local 已观看时间 = time_tracker.获取已过时间()
    local 剩余观看时间 = 观看时间 - 已观看时间
    
    -- 确保至少观看3秒
    if 剩余观看时间 < 3 then 
        剩余观看时间 = 3
    end
    
    lrSDK.日志类_调试输出("计划观看时间: " .. 剩余观看时间 .. "秒")
    
    -- 根据不同情况选择不同的观看行为
    local 行为选择 = math.random(1, 100)
    
    if 行为选择 <= 40 then  -- 40%概率使用随机滑动后切换到吃饭补贴
        lrSDK.日志类_调试输出("选择模式：随机滑动后切换到吃饭补贴")
        -- 设置最小观看时间，确保至少观看一定时间
        local 最小时间 = math.max(3, math.floor(剩余观看时间 * 0.5))
        -- 最大时间略小于总时间但不低于最小时间
        local 最大时间 = math.max(最小时间 + 1, math.floor(剩余观看时间 * 0.8))
        
        -- 确保最小时间小于最大时间
        if 最小时间 >= 最大时间 then
            最小时间 = 最大时间 - 1
        end
        
        lrSDK.日志类_调试输出("随机滑动时间范围: " .. 最小时间 .. "-" .. 最大时间 .. "秒")
        -- 额外停留时间随机2-8秒
        local 额外停留时间 = math.random(2, 8)
        
        -- 结束当前的时间记录，以便在随机滑动观看功能内重新计时
        time_tracker.结束记录()
        
        -- 调用随机滑动观看功能，确保每3秒检查一次广告
        local 滑动观看总时间 = math.random(最小时间, 最大时间)
        lrSDK.日志类_调试输出("滑动观看总时间: " .. 滑动观看总时间 .. "秒")
        
        local 滑动观看已用时间 = 0
        local 滑动检查间隔 = 3 -- 每3秒检查一次广告
        local 已滑动 = false
        
        while 滑动观看已用时间 < 滑动观看总时间 do
            -- 计算当前段应观看的时间
            local 当前段时间 = math.min(滑动检查间隔, 滑动观看总时间 - 滑动观看已用时间)
            
            -- 检查广告并处理
            lrSDK.日志类_调试输出("执行第" .. math.floor(滑动观看已用时间/滑动检查间隔+1) .. "次广告检查")
            
            -- 确保能正确检测到广告
            local 尝试次数 = 0
            local 最大尝试次数 = 3
            local 是否为广告 = false
            
            while 尝试次数 < 最大尝试次数 do
                是否为广告 = ad_converter.检查广告页面()
                if 是否为广告 then
                    break
                end
                cr.等待(300)  -- 短暂延时后再次检查
                尝试次数 = 尝试次数 + 1
            end
            
            if 是否为广告 then
                lrSDK.日志类_调试输出("滑动观看过程中检测到广告")
                ad_converter.转化广告()
            else
                lrSDK.日志类_调试输出("未检测到广告，继续观看")
                -- 观看当前段视频
                lrSDK.日志类_调试输出("观看当前段视频: " .. 当前段时间 .. "秒，已观看: " .. 滑动观看已用时间 .. "秒")
                sleep(当前段时间 * 1000)
                滑动观看已用时间 = 滑动观看已用时间 + 当前段时间
                
                -- 如果已累计足够时间，执行一次滑动
                if 滑动观看已用时间 >= 滑动观看总时间 * 0.5 and not 已滑动 then
                    lrSDK.日志类_调试输出("执行随机滑动")
                    cr.向上滑动()
                    cr.等待(500)
                    已滑动 = true
                end
            end
        end
        
        -- 观看额外时间
        if 额外停留时间 > 0 then
            lrSDK.日志类_调试输出("观看额外时间: " .. 额外停留时间 .. "秒")
            local 额外已用时间 = 0
            
            while 额外已用时间 < 额外停留时间 do
                -- 计算当前段应观看的时间
                local 当前段时间 = math.min(滑动检查间隔, 额外停留时间 - 额外已用时间)
                
                -- 检查广告并处理
                lrSDK.日志类_调试输出("执行第" .. math.floor(额外已用时间/滑动检查间隔+1) .. "次广告检查")
                
                -- 确保能正确检测到广告
                local 尝试次数 = 0
                local 最大尝试次数 = 3
                local 是否为广告 = false
                
                while 尝试次数 < 最大尝试次数 do
                    是否为广告 = ad_converter.检查广告页面()
                    if 是否为广告 then
                        break
                    end
                    cr.等待(300)  -- 短暂延时后再次检查
                    尝试次数 = 尝试次数 + 1
                end
                
                if 是否为广告 then
                    lrSDK.日志类_调试输出("额外观看过程中检测到广告")
                    ad_converter.转化广告()
                else
                    lrSDK.日志类_调试输出("未检测到广告，继续额外观看")
                    -- 观看当前段视频
                    lrSDK.日志类_调试输出("额外观看当前段视频: " .. 当前段时间 .. "秒，已观看: " .. 额外已用时间 .. "秒")
                    sleep(当前段时间 * 1000)
                    额外已用时间 = 额外已用时间 + 当前段时间
                end
            end
        end
        
        return true
        
    elseif 行为选择 <= 70 then  -- 30%概率中途滑动但不切换任务
        lrSDK.日志类_调试输出("选择模式：中途滑动继续观看")
        
        -- 将剩余观看时间分成多段，每3秒检查一次广告
        local 每段时间 = 3  -- 每段3秒
        local 已用时间 = 0
        local 已滑动 = false
        
        while 已用时间 < 剩余观看时间 do
            -- 计算当前段应观看的时间
            local 当前段时间 = math.min(每段时间, 剩余观看时间 - 已用时间)
            
            -- 检查广告并处理
            lrSDK.日志类_调试输出("执行第" .. math.floor(已用时间/每段时间+1) .. "次广告检查")
            
            -- 确保能正确检测到广告
            local 尝试次数 = 0
            local 最大尝试次数 = 3
            local 是否为广告 = false
            
            while 尝试次数 < 最大尝试次数 do
                是否为广告 = ad_converter.检查广告页面()
                if 是否为广告 then
                    break
                end
                cr.等待(300)  -- 短暂延时后再次检查
                尝试次数 = 尝试次数 + 1
            end
            
            if 是否为广告 then
                lrSDK.日志类_调试输出("观看过程中检测到广告")
                ad_converter.转化广告()
            else
                lrSDK.日志类_调试输出("未检测到广告，继续观看")
                -- 观看当前段视频
                lrSDK.日志类_调试输出("观看当前段视频: " .. 当前段时间 .. "秒，已观看: " .. 已用时间 .. "秒")
                sleep(当前段时间 * 1000)
                已用时间 = 已用时间 + 当前段时间
            end
            
            -- 如果已经观看了大约一半时间，执行滑动
            if 已用时间 >= (剩余观看时间 * 0.5) and not 已滑动 then
                lrSDK.日志类_调试输出("执行中途滑动")
                cr.向上滑动()
                cr.等待(500)
                已滑动 = true
            end
        end
        
    else  -- 30%概率直接观看全程，同样每3秒检查一次广告
        lrSDK.日志类_调试输出("选择模式：直接观看全程")
        
        -- 将剩余观看时间分成多段，每3秒检查一次广告
        local 每段时间 = 3  -- 每段3秒
        local 已用时间 = 0
        
        while 已用时间 < 剩余观看时间 do
            -- 计算当前段应观看的时间
            local 当前段时间 = math.min(每段时间, 剩余观看时间 - 已用时间)
            
            -- 检查广告并处理
            lrSDK.日志类_调试输出("执行第" .. math.floor(已用时间/每段时间+1) .. "次广告检查")
            
            -- 确保能正确检测到广告
            local 尝试次数 = 0
            local 最大尝试次数 = 3
            local 是否为广告 = false
            
            while 尝试次数 < 最大尝试次数 do
                是否为广告 = ad_converter.检查广告页面()
                if 是否为广告 then
                    break
                end
                cr.等待(300)  -- 短暂延时后再次检查
                尝试次数 = 尝试次数 + 1
            end
            
            if 是否为广告 then
                lrSDK.日志类_调试输出("观看过程中检测到广告")
                ad_converter.转化广告()
            else
                lrSDK.日志类_调试输出("未检测到广告，继续观看")
                -- 观看当前段视频
                lrSDK.日志类_调试输出("观看当前段视频: " .. 当前段时间 .. "秒，已观看: " .. 已用时间 .. "秒")
                sleep(当前段时间 * 1000)
                已用时间 = 已用时间 + 当前段时间
            end
        end
    end
    
    -- 结束记录时间
    local 实际观看时间 = time_tracker.结束记录()
    lrSDK.日志类_调试输出("观看视频完成，实际观看时间: " .. 实际观看时间 .. "秒")
    
    -- 返回上一页（退出视频）
    lrSDK.触控类_模拟物理按键(4)  -- 使用返回键退出
    
    return true
end

return watch_drama 